package com.ruoyi.web.controller.tool.designpattern.structuralPatterns.bridge;

/**
 * 桥接模式
 *
 * @author Hack2003
 * @date 2024/3/21 11:33
 **/
// 1. 抽象部分 - 形状接口
 interface Shape {
    void draw(); // 引入颜色接口作为参数
}

// 2. 实现部分 - 颜色接口
 interface Color {
    String fill();
}

// 3. 具体实现部分 - 颜色类
 class RedColor implements Color {
    @Override
    public String fill() {
        return "填充红色";
    }
}

 class GreenColor implements Color {
    @Override
    public String fill() {
        return "填充绿色";
    }
}

// 4. 具体实现部分 - 形状类
 class Circle implements Shape {
    private Color color;

    public Circle(Color color) {
        this.color = color;
    }

    @Override
    public void draw() {
        System.out.println("绘制圆形，并" + color.fill());
    }
}

 class Square implements Shape {
    private Color color;

    public Square(Color color) {
        this.color = color;
    }

    @Override
    public void draw() {
        System.out.println("绘制正方形，并" + color.fill());
    }
}

/**
 * 桥接模式(Bridge Pattern)是一种结构型设计模式，
 * 它将抽象部分与其实现部分分离，使它们可以独立地变化。
 * 在Java中，桥接模式常常用于解耦抽象接口与其实现之间的依赖，
 * 以便在运行时可以根据需要动态地组合实现。
 */
public class Test {
    public static void main(String[] args) {
        //把颜色交给了形状
        Shape redCircle = new Circle(new RedColor());
        Shape greenSquare = new Square(new GreenColor());
        //画形状时也输出了颜色
        redCircle.draw();
        greenSquare.draw();
    }
}
